//package czx.drools.common.config;
//
//import org.springframework.cloud.gateway.filter.GatewayFilter;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.http.HttpHeaders;
//import org.springframework.stereotype.Component;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Mono;
//
//import java.security.Principal;
//import java.util.Base64;
//import java.util.List;
//import java.util.function.BiConsumer;
//import java.util.function.Function;
//
///**
// * @Description: TODO
// * @author: chenzx
// * @date: 2023/12/1 16:03
// */
//@Component
//public class DemoFilter implements GatewayFilter {
//
//    @Override
//    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        // 根据条件判断是否要走代理
//        String requestUrl = exchange.getRequest().getURI().toString();
//        if (requestUrl.contains("www.baidu.com") && someCondition(exchange)) {
//            exchange.getPrincipal().flatMap(new Function<Principal, Mono<?>>() {
//                @Override
//                public Mono<?> apply(Principal principal) {
//                    if (principal == null) {
//                        String username = principal.getName();
//                        exchange.getRequest().mutate()
//                                // 这里假设代理服务器需要用户名进行认证，如果不需要账号密码认证，可以将这一行代码注释掉。
////                                .header("Proxy-Authorization", "Basic " + Base64.getEncoder().encodeToString((username + ":password").getBytes()))
//                                .build();
//                    }
//                    return chain.filter(exchange);
//                }
//            });
//        }
//        return Mono.empty();
//    }
//
//    private boolean someCondition(ServerWebExchange exchange) {
//        // 根据实际情况编写条件判断逻辑，这里假设当请求的URL中包含某个特定的关键词时，需要走代理。
//        HttpHeaders headers = exchange.getRequest().getHeaders();
//        headers.forEach(new BiConsumer<String, List<String>>() {
//            @Override
//            public void accept(String s, List<String> strings) {
//
//            }
//        });
//        // 根据实际情况编写条件判断逻辑
//        return true; // 这里只是一个示例，实际应用中需要根据具体需求编写条件判断逻辑
//    }
//}
